#pragma once

#include "GeoExport.h"
#include "Types.h"
#include <list>

class Mesh;
class Loop;

class GEO_API Face {
public:
    Face(Mesh* mesh);
    ~Face() = default;

    ID id() const { return _id; }

    Mesh* mesh() const { return _mesh; }

    Loop* outerLoop() const { return _outerLoop; }
    void setOuterLoop(Loop* loop) { _outerLoop = loop; }

    const std::list<Loop*>& innerLoops() const { return _innerLoops; }
    void addInnerLoop(Loop* loop) { _innerLoops.push_back(loop); }

private:
    ID _id;
    Mesh* _mesh = nullptr;
    Loop* _outerLoop = nullptr;   // 外环
    std::list<Loop*> _innerLoops; // 内环
};